package cn.com.smart.web.utils;

import java.awt.Font;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis3D;
import org.jfree.chart.axis.NumberAxis3D;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

import com.sun.org.apache.bcel.internal.generic.RETURN;

public class JFreeChartUtil {

    public static String genPieChart(HttpSession session) throws IOException {

    	DefaultPieDataset dataset = new DefaultPieDataset();
        //三个参数依次为  数据、所属（不同所属颜色不同）、统计的物体的名称
    	dataset.setValue("开发", 25);
    	dataset.setValue("宣传", 25);
    	dataset.setValue("市场", 45);
    	dataset.setValue("其他", 10);

        /*
         * 解决字体乱码（在创建图表之前设定）
         */
        StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
        standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
        standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
        standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
        ChartFactory.setChartTheme(standardChartTheme);

        //创建chart，参数依次为  图表标题   x轴名  y轴名  dataset 方向  ...
        JFreeChart chart =  ChartFactory.createPieChart("成本构成分析图",dataset, true, true, true);
//        JFreeChart chart = ChartFactory.createBarChart3D("成本构成分析图", "水果", "销售", dataset, PlotOrientation.VERTICAL, true,
//                true, true);
        String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 500, null, session);
        return fileName;
    }
    
    public static String genBarChart(HttpSession session) throws IOException {

    	DefaultCategoryDataset  dataset = new DefaultCategoryDataset ();
        //三个参数依次为  数据、所属（不同所属颜色不同）、统计的物体的名称
    	dataset .addValue(20, "", "") ;


        /*
         * 解决字体乱码（在创建图表之前设定）
         */
        StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
        standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
        standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
        standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
        ChartFactory.setChartTheme(standardChartTheme);

        //创建chart，参数依次为  图表标题   x轴名  y轴名  dataset 方向  ...
        JFreeChart chart = ChartFactory.createBarChart3D("成本构成分析图", "水果", "销售", dataset, PlotOrientation.VERTICAL, true,
                true, true);
        String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 500, null, session);
        return fileName;
    }
    
    public static String genTestBarChart (HttpSession session) throws IOException {
    	 DefaultCategoryDataset dataset=new DefaultCategoryDataset();
         //添加数据
         dataset.addValue(98, "合同金额", "项目甲");
         dataset.addValue(87, "支付金额", "项目甲");
         dataset.addValue(68, "合同金额", "项目乙");
         dataset.addValue(89, "支付金额", "项目乙");
         dataset.addValue(56, "合同金额", "项目丙");
         dataset.addValue(96, "支付金额", "项目丙");
          
         JFreeChart chart=ChartFactory.createBarChart3D(
                 "项目资金分析",
                 "项目名",//X轴的标签 
                 "金额 (单位:万)",//Y轴的标签 
                 dataset, //图标显示的数据集合
                 PlotOrientation.VERTICAL, //图像的显示形式（水平或者垂直）
                 true,//是否显示子标题 
                 true,//是否生成提示的标签 
                 true); //是否生成URL链接      
                //处理图形上的乱码
                 //处理主标题的乱码
                 chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));
                 //处理子标题乱码
                 chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));
                 //获取图表区域对象
                 CategoryPlot categoryPlot = (CategoryPlot)chart.getPlot();
                 //获取X轴的对象
                 CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();
                 //获取Y轴的对象
                 NumberAxis3D numberAxis3D = (NumberAxis3D)categoryPlot.getRangeAxis();
                 
                 //处理X轴上的乱码
                 categoryAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));
                 //处理X轴外的乱码
                 categoryAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));
                 //处理Y轴上的乱码
                 numberAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));
                 //处理Y轴外的乱码
                 numberAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));
                 
                 //处理Y轴上显示的刻度，以10作为1格
                 numberAxis3D.setAutoTickUnitSelection(false);
                 NumberTickUnit unit = new NumberTickUnit(10);
                 numberAxis3D.setTickUnit(unit);
                 //获取绘图区域对象
                 BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();
                 //设置柱形图的宽度
                 barRenderer3D.setMaximumBarWidth(0.07);
                 //在图形上显示数字
                 barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
                 barRenderer3D.setBaseItemLabelsVisible(true);
                 barRenderer3D.setBaseItemLabelFont(new Font("宋体",Font.BOLD,15));
                  
                 //在D盘目录下生成图片
                 
//                 File file = new File("chart.jpeg");
//                 try {
//                     ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
//                 } catch (IOException e) {
//                     e.printStackTrace();
//                 }
//               
//                 //使用ChartFrame对象显示图像
//                 ChartFrame frame = new ChartFrame("xyz",chart);
//                 frame.setVisible(true);
//                 frame.pack();
                 String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 500, null, session);
                 return fileName;
     }
    
    public String getGanrChart() {
    	return "";
    }
    
    }

